<!DOCTYPE html>
<html>

<head>
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <title>两数之和</title>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <link rel='stylesheet' type='text/css' media='screen' href='main.css'>
    <style>
        .box {
            display: flex;
            padding: 5%;
        }

        .left-wrap {
            width: 40%;
        }

        pre {
            text-align: left;
            margin-left: -20%;
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="left-wrap">
            <div class="notranslate">
                <p>给出两个&nbsp;<strong>非空</strong>
                    的链表用来表示两个非负的整数。其中，它们各自的位数是按照&nbsp;<strong>逆序</strong>&nbsp;的方式存储的，并且它们的每个节点只能存储&nbsp;<strong>一位</strong>&nbsp;数字。
                </p>
                <p>如果，我们将这两个数相加起来，则会返回一个新的链表来表示它们的和。</p>
                <p>您可以假设除了数字 0 之外，这两个数都不会以 0&nbsp;开头。</p>
                <p><strong>示例：</strong></p>
                <pre>
                    <strong>输入：</strong>(2 -&gt; 4 -&gt; 3) + (5 -&gt; 6 -&gt; 4)
                    <strong>输出：</strong>7 -&gt; 0 -&gt; 8
                    <strong>原因：</strong>342 + 465 = 807
                </pre>
            </div>

        </div>
    </div>
</body>
<script>
    /**
        给出两个 非空 的链表用来表示两个非负的整数。其中，它们各自的位数是按照 逆序 的方式存储的，并且它们的每个节点只能存储 一位 数字。
        如果，我们将这两个数相加起来，则会返回一个新的链表来表示它们的和。
    
        您可以假设除了数字 0 之外，这两个数都不会以 0 开头。
    
        示例：
    
        输入：(2 -> 4 -> 3) + (5 -> 6 -> 4)
        输出：7 -> 0 -> 8
        原因：342 + 465 = 807
    */

    /**
     * Definition for singly-linked list.
     * function ListNode(val) {
     *     this.val = val;
     *     this.next = null;
     * }
     */
    /**
     * @param {ListNode} l1
     * @param {ListNode} l2
     * @return {ListNode}
     */
    /*这个是别人的*/
    var addTwoNumbers = function (l1, l2) {
        let carry = 0
        const dummy = new ListNode()
        let pointer = dummy
        while (l1 || l2 || carry) {
            const num1 = l1 ? l1.val : 0
            const num2 = l2 ? l2.val : 0
            const sum = num1 + num2 + carry
            if (sum > 9) {
                pointer.next = new ListNode(sum % 10)
                carry = 1
            } else {
                pointer.next = new ListNode(sum)
                carry = 0
            }
            if (l1) l1 = l1.next
            if (l2) l2 = l2.next
            pointer = pointer.next
        }
        return dummy.next
    };
    // 不太懂链表 按照数组来做
    var addTwoNumbers1 = function (l1, l2) {
        var carry = 0
        var dummy = []
        var arr1 = [], arr2 = []
        if (l1.length >= l2.length) {
            arr1 = l1
            arr2 = l2
        } else {
            arr1 = l2
            arr2 = l1
        }
        for (var i = 0; i < arr1.length; i++) {
            var sum = arr1[i] + (arr2[i] || 0) + carry
            if (sum > 9) {
                dummy.push(sum%10)
                carry = 1
            } else {
                dummy.push(sum)
                carry = 0
            }
        }
        return dummy
    };

    console.log(addTwoNumbers1([2, 3, 4, 3], [3, 5, 1]))

</script>

</html>